{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.random.seed(666)\n",
    "X = np.random.normal(0, 1, size=(200, 2))\n",
    "y = np.array(X[:, 0] ** 2 + X[:, 1] ** 2 < 1.5, dtype='int')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def plot_decision_boundary(model, axis):\n",
    "    \n",
    "    x0, x1 = np.meshgrid(\n",
    "        np.linspace(axis[0], axis[1], int((axis[1] - axis[0]) * 100)).reshape(-1, 1),\n",
    "        np.linspace(axis[2], axis[3], int((axis[3] - axis[2]) * 100)).reshape(-1, 1)\n",
    "    )\n",
    "    X_new = np.c_[x0.ravel(), x1.ravel()]\n",
    "    \n",
    "    y_predict = model.predict(X_new)\n",
    "    zz = y_predict.reshape(x0.shape)\n",
    "    \n",
    "    from matplotlib.colors import ListedColormap\n",
    "    custom_cmap = ListedColormap(['#EF9A9A', '#FFF59D', '#90CAF9'])\n",
    "    \n",
    "    plt.contourf(x0, x1, zz, cmap=custom_cmap)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\niChj/j8w7HmsjsaLMQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a19c11128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X[y==0, 0], X[y==0, 1])\n",
    "plt.scatter(X[y==1, 0], X[y==1, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from LogisticRegression import LogisticRegression\n",
    "\n",
    "def PolynormialLogisticRegression(degree):\n",
    "    return Pipeline([\n",
    "        ('poly', PolynomialFeatures(degree=degree)),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "        ('log_reg', LogisticRegression())\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('poly', PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)), ('std_scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('log_reg', LogisticRegression())])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg = PolynormialLogisticRegression(degree = 2)\n",
    "poly_log_reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.94999999999999996"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg.score(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1a1fe80470>"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg, axis=[-4, 4, -4, 4])\n",
    "plt.scatter(X[y==0, 0], X[y==0, 1])\n",
    "plt.scatter(X[y==1, 0], X[y==1, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('poly', PolynomialFeatures(degree=20, include_bias=True, interaction_only=False)), ('std_scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('log_reg', LogisticRegression())])"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg2 = PolynormialLogisticRegression(degree = 20)\n",
    "poly_log_reg2.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nsBNCSMr4/4KEtiavLU6DAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1fe134a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg2, axis=[-4, 4, -4, 4])\n",
    "plt.scatter(X[y==0, 0], X[y==0, 1])\n",
    "plt.scatter(X[y==1, 0], X[y==1, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg = LogisticRegression()\n",
    "log_reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.60499999999999998"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg.score(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.13862213, -0.05142173])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1fe13978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(log_reg, axis=[-4,4,-4,4])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
